home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 34.zip
/
BS1 part 34
/
utildisk 6 omitech.adf
/
DOCS
/
raster.s
< prev
next >
Wrap
Text File
|
1990-03-10
|
2KB
|
132 lines
**************************
** Raster-Demonstration **
** -------------------- **
** ©'90 MMS of Level 4 **
**************************
Anz_Lines= 200 ; Anzahl der Rasterzeilen
Length= 15 ; Anzahl der Farben bei Colors
Number= 10 ; Anzahl der Balken
Distance= 7 ; Abstand der Balken in Pixeln
jmp $70000
org $70000
load $70000
o: move.l #Start,$80
trap #0
clr.l d0
rts
Start: move.w #$2700,sr
move.w #$8400,$dff096
bsr.L Init_Raster ; Alles initialisieren
move.l #co,$dff080 ; Copper einschalten
Sync: cmp.b #$f0,$dff006
bne.s Sync
bsr.L Clr_Raster ; Copperfarben loeschen
bsr.L Do_Raster ; Raster aufbauen
btst #6,$bfe001 ; Mouse testen
bne.L Sync
lea GfxName,a1 ; Copper zurueckschalten
move.l $4,a6
jsr -408(a6)
move.l d0,a1
move.l $26(a1),$dff080
jsr -414(a6)
rte
GfxName: dc.b "graphics.library",0
even
co: ; Copperliste
Raster: blk.l Anz_Lines+1*2,$fffffffe
dc.w $ffff,$fffe
Init_Raster:
lea Raster,a0 ; Raster in Copperliste
move.l #$2901fffe,d0
move.l #$01800000,d1
move.w #Anz_Lines,d7
Loop: move.l d0,(a0)+ ; schreiben
move.l d1,(a0)+
add.l #$01000000,d0
dbf d7,Loop
rts
Clr_Raster:
lea Raster+4+2,a0 ; Alle Farbdaten im Copper
move.w #Anz_Lines,d7
Clear: clr.w (a0) ; loeschen
lea 8(a0),a0
dbf d7,Clear
rts
Do_Raster:
move.w #Number-1,d7
move.w Pos,d0
move.w dir,d5
Schreiben:
bsr.s Set_One_Raster ; Balken an Stelle d0 schreiben
add.w d5,d0 ; naechsten Balken ausrechnen
cmp.w #Anz_Lines-Length,d0
blt.s OK
neg.w d5
add.w d5,d0
OK: tst.w d0
bge OK2
neg.w d5
add.w d5,d0
OK2:
dbf d7,Schreiben
move.w Pos,d0 ; Pos fuer naechsten ersten
add.w Dir,d0 ; Balken ausrechnen
cmp.w #Anz_Lines-Length,d0
blt.s OK3
neg.w Dir
add.w Dir,d0
OK3: tst.w d0
bge OK4
neg.w Dir
add.w Dir,d0
OK4:
move.w d0,Pos
rts
Set_One_Raster:
movem.w d0/d7,-(a7) ; d0 zwischenspeichern
lea Colors,a1 ; Farben des Balkens
lea Raster+4+2,a0 ; Eintrag in Copperliste
lsl.w #3,d0 ; Raster+6+(8*Hoehe)
lea (a0,d0.w),a0
move.w #Length-1,d7 ; Laenge des Balkens
Loop_Fill:
move.w (a1)+,(a0) ; In Copperliste schreiben
lea 8(a0),a0
dbf d7,Loop_Fill
movem.w (a7)+,d0/d7 ; d0 wieder holen
rts
Colors: ; Farbdaten fuer einen Balken
dc.w $0313,$0535,$0757,$0979,$0b9b,$0dbd,$0fdf,$0fff
dc.w $0fdd,$0dbb,$0b99,$0977,$0755,$0533,$0311,-1
Pos: dc.w 0 ; Aktuelle Position des
; 1. zu schreibenden Balkens
Dir: dc.w Distance ; Additionswert (+/- Distance)